package com.woniuxy.mqSimplest02;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.woniuxy.utils.RabbitConnection;
import lombok.extern.log4j.Log4j2;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

/**
 * @Author: linKe
 * @Date: 2022/1/10 15:49
 * @FileName: Producer
 * @version: 1.0
 * @Description: RabbitMQ 第一种Simplest
 * 生产者类 发送消息
 */
@Log4j2
public class Producer {

    public static void main(String[] args) throws IOException, TimeoutException {
        // 连接对象
        Connection connection = RabbitConnection.getConnection();
        // 连接通道
        Channel channel = connection.createChannel();
        /*
        声明队列 (String queue, boolean durable, boolean exclusive, boolean autoDelete,
                                        Map<String, Object> arguments)
        queue – 队列的名称
        durable - 是否是持久化队列，如果我们声明一个持久队列，则为真（该队列将在服务器重新启动后继续存在）--true
        exclusive - 是否是独占队列，如果我们声明一个独占队列，则为真（仅限于此连接）要消费当前队列的消息，必须使用创建这个的连接 --false
        autoDelete – 是否是自动删除队列，如果我们声明一个自动删除队列，则为 true（服务器将在不再使用时将其删除） --false
        arguments – 队列相关的其他属性（构造参数）
         */
        channel.queueDeclare("queueSimplest2",true,false,false,null);

        /*
        发送消息  Simplest模式使用的是默认交换机
        参数：
            (String exchange, String routingKey, BasicProperties props, byte[] body)
        exchange - 交换机（使用默认交换机） 将消息发布到的交换   生成的消息先进入交换机，交换机根据路由规则，将消息投递到指定的队列
        routingKey – 路由键（消息队列名） Simplest模式就是消息队列名
        props - 消息的其他属性 - 路由标头等
        body - 正文 消息正文
         */
        for (int i = 0; i < 9; i++) {
            channel.basicPublish("", "queueSimplest2", null, ("最简单的消息队列信息发送..."+i).getBytes(StandardCharsets.UTF_8));
            log.info("发送成功");
        }
        // 关闭资源
        channel.close();
        connection.close();
    }

}
